The present application relates generally to an improved data processing apparatus and method and more specifically to mechanisms for sharing resources allocated to an entitled virtual machine.
A virtual machine (VM) is a software implemented abstraction of underlying hardware, which is presented to an application layer of a data processing system. A virtual machine, which may also be referred to as a logical partition (LPAR) may be based on specifications of a hypothetical computer or emulate a computer architecture and functions of a real world computer. Thus, a virtual machine (VM) is a software implementation of a machine i.e. a computer) that executes programs like a physical machine. Virtual machines are separated into two major classifications, based on their use and degree of correspondence to any real machine:                1. A system virtual machine provides a complete system platform which supports the execution of a complete operating system (OS). A system virtual machine usually emulates an existing architecture, and is built with the purpose of either providing a platform to run programs where the real hardware is not available for use (for example, executing software on otherwise obsolete platforms), or of having multiple instances of virtual machines lead to more efficient use of computing resources, both in terms of energy consumption and cost effectiveness (known as hardware virtualization, the key to a cloud computing environment), or both.        2. A process virtual machine (also, language virtual machine) is designed to run a single program, which means that it supports a single process. Such virtual machines are usually closely suited to one or more programming languages and built with the purpose of providing program portability and flexibility (amongst other things).        
An essential characteristic of virtual machines is that the software running inside the virtual machine is limited to the resources and abstractions allocated to the virtual machine, i.e. the virtual machine cannot break out of its virtual environment.
There are two main aspects of virtual environments: VM placement and shared processor VMs. VM placement is of fundamental importance because of the well-known fact that when all processors allocated to the VM are contained within a same node as the VM, the performance of that VM is maximized. All local processors mean more effective cache algorithms, better data sharing, lower latencies, and the opportunity to effectively manage the VM's data in a single, local memory region. This configuration is called a Home Node.
Shared processor VMs improve the efficiency of processors in a system by allowing unused processor cycles from one VM to be claimed and used by other VMs. Dedicated processor cycles are often wasted if the process running on them goes idle. Sharing of processors cycles ensures that the processor utilization is maximized. However, one drawback of a shared processor environment is that, when the original process is ready to begin using its allocated processor cycles, the processor cycles might be allocated to a foreign, uncapped VM who saw an opportunity to grab the extra processor cycles. Therefore, the process might then be forced to use shared processors, which could create longer latencies, more cache traffic across nodes, etc.